Disc drives are typically used for information storage and utilize at least one rotatable disc with concentric tracks defined thereon for storing data. A data head (or transducer) is disposed relative to the disc surface to read data from, and write data to, the various tracks on the disc. The transducer is coupled to, or formed integrally with, an actuator arm which moves the transducer relative to the disc surface in order to access prespecified portions of the disc surface.
In retrieving data from, and writing data to, the discs, the disc drive often employs a cache or buffer memory. For instance, data to be written to the disc is often received from a host controller and written to the buffer or cache until the write circuitry has time to write the data from the buffer or cache to the specified location on the disc. Similarly, data retrieved from the disc is often written into the buffer until it can be retrieved by the host.
It often happens that the host, in writing data to the disc, will write data to a specified logical block address on the disc. That data is first written into cache were it is held until the write circuitry can write it to the actual specified location on the disc. However, prior to that data being written on the disc, the host may issue another write command, specifying different data to be written to the same logical block address on the disc. Vector buffer management techniques have thus been implemented to simply replace the older data in the buffer, or cache, with the new data to be written to the same logical block address. In this way, the write circuitry need only perform one write operation to the disc, rather than performing two separate write operations.
In any case, after performing a number of cache reads and cache writes, the cache or buffer can become highly fragmented. For example, the buffer or cache is typically accessed by a large number of different entities in the disc drive, such as the host, the disc control components (such as the reading and writing circuitry), error correction code (ECC) components, and a traversal engine which actually traverses a linked list in the buffer to determine where to access user (or host) data in the buffer. Some data in the buffer is stored as a single linked list such that the data corresponding to logical blocks (e.g., 512-byte chunks) on the disc are stored in buffer blocks (e.g., a two-byte values comprising a sector address) and are linked in the buffer by an address in one buffer block which points to the address of the next buffer block containing data in the specified logical block in the disc. Some data (such as host data) is stored in seemingly randomly located sectors of space in the buffer, which are located as indicated by the linked list.
In traversing the buffer, the traversal engine has traditionally functioned such that each access of a subsequent buffer or cache address was treated as a completely new and independent access to the cache. Therefore, even in situations where the traversal engine was to traverse three sequential buffer memory addresses, the traversal engine would release ownership of the buffer and re-arbitrate for access to each subsequent (or “next”) buffer address location. This adds significant delay in the command overhead for the drive and degrades drive performance.